Subclasses Differ only in Methods returning Constant values (SDMC)

Description:

SDMC detects if all subclasses of a class vary only in methods that return constant data. In such cases, it is suggested to change the methods to superclass fields and eliminate the subclasses.

Incorrect:

Person = class abstract
    private
      function isMale():boolean;virtual;abstract;
      function getCode():char;virtual;abstract;
end;

Male = class(Person)
    private
      function isMale():boolean;override;
      function getCode():char;override;
end;

Female = class(Person)
    private
      function isMale():boolean;override;
      function getCode():char;override;
end;
...
function Male.isMale():boolean;
begin
  result := true;
end;

function Male.getCode():char;
begin
  result := 'M';
end;

function Female.isMale():boolean;
begin
  result := false;
end;

function Female.getCode():char;
begin
  result := 'F';
end;

Correct:

Person = class
    strict private
      myIsMale:boolean;
      code:char;
    private
      function isMale():boolean;
      function getCode():char;
end;
...
function Person.getCode():char;
begin
  result := code;
end;

function Person.isMale():boolean;
begin
  result := myIsMale;
end;

Refactoring: